<template>
  <h2>当前求和为:{{sum}}</h2>
  <button @click="sum++">点我+1</button>
  <hr>
  <h2>当前的信息为:{{msg}}</h2>
  <button @click="msg+='!'">修改信息</button>
  <hr>
  <h2>姓名：{{person.name}}</h2>
  <h2>年龄：{{person.age}}</h2>
  <h2>薪资：{{person.job.j1.salary}}K</h2>
  <button @click="person.name+='~'">修改姓名</button>
  <button @click="person.age++">增长年龄</button>
  <button @click="person.job.j1.salary++">涨薪</button>
</template>
  
<script>
  import {ref,reactive,watch} from 'vue'
  export default {
    name: 'Demo',
    // watch: {
    //   /* sum(newValue,oldValue){
    //     console.log('sum的值变化了',newValue,oldValue)
    //   }, */
    //   sum:{
    //     immediate: true,// 进入页面时立即执行一下
    //     deep: true,// 
    //     handler(newValue,oldValue){
    //       console.log('sum的值变化了',newValue,oldValue)
    //     }
    //   }
    // },  
    setup(props,context){
      // 数据
      let sum = ref(0)
      let msg = ref('你好')
      let person = reactive({
        name: '张三',
        age: 18,
        job: {
          j1: {
            salary: 20
          }
        }
      })

      console.log(sum);// RefImpl{...} sum.value是对应的值:0
      console.log(msg);// RefImpl{...} msg.value是对应的值:'你好'
      console.log(person);// RefImpl{...}  person.value是reactive所生成的Proxy对象：Proxy{...}

      // 这里监视的是sum的RefImpl对象，当对象里面的value（sum的值是0）发生变化时，就会被监听到
      watch(sum,(newValue,oldValue)=>{
        console.log('sum的值变化了',newValue,oldValue)
      })


      /**
       * 这里监视的是person的RefImple对象，该对象的value是reactive所生成的Proxy对象数据,
       * 只有当value属性整个被替换时才会被监视到，要想person的属性被监视到
       * 1.监视person.value，监视的就是RefImpl{...}中的Proxy{...}，也就是reactive函数所生成的Proxy对象数据，
       *    reactive所定义的数据特点就是深层次的，而且自动开启深度监视
       * 2.watch(person,{newValue.oldValue}=>{},{deep: true})
       *    这样写就是value属性中的深度属性的值变化时都会被监视到
       **/
      watch(person,(newValue,oldValue)=>{
        console.log('person的值变化了',newValue,oldValue)
      },{deep: true})


      // 返回一个对象（常用）
      return {
        sum,
        msg,
        person
      }
  
    }
  
  }
  </script>
  
  
  